package com.waikuai.shop.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.waikuai.shop.entity.UserFavorite;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户收藏Mapper接口
 * @author waikuai
 */
@Mapper
public interface UserFavoriteMapper extends BaseMapper<UserFavorite> {

    /**
     * 获取用户收藏列表（包含商品信息）
     * @param userId 用户ID
     * @return 收藏列表
     */
    List<UserFavorite> selectFavoritesWithProductByUserId(@Param("userId") Long userId);

    /**
     * 检查用户是否已收藏该商品
     * @param userId 用户ID
     * @param productId 商品ID
     * @return 收藏记录
     */
    UserFavorite selectByUserIdAndProductId(@Param("userId") Long userId,
                                          @Param("productId") Long productId);

    /**
     * 取消用户收藏
     * @param userId 用户ID
     * @param productId 商品ID
     * @return 影响行数
     */
    int deleteFavorite(@Param("userId") Long userId,
                      @Param("productId") Long productId);

    /**
     * 清空用户所有收藏
     * @param userId 用户ID
     * @return 影响行数
     */
    int clearFavoritesByUserId(@Param("userId") Long userId);

    /**
     * 统计用户收藏数量
     * @param userId 用户ID
     * @return 收藏数量
     */
    Integer countFavoritesByUserId(@Param("userId") Long userId);

    /**
     * 统计商品收藏数量
     * @param productId 商品ID
     * @return 收藏数量
     */
    Integer countFavoritesByProductId(@Param("productId") Long productId);

    /**
     * 获取商品收藏用户ID列���
     * @param productId 商品ID
     * @return 用户ID列表
     */
    List<Long> selectUserIdsByProductId(@Param("productId") Long productId);
}